import {
    TimerDefaultType,
    TimerMode,
    TimerStatusMode,
} from "@renderer/types/GlobalEnum";
import { defineStore } from "pinia";
import { reactive } from "vue";
import { useTimeStore } from "./time";

export const useAppStore = defineStore("appStore", {
    state: () =>
        reactive({
            // 默认为倒计时模式
            mode: TimerMode.nomal,
            // 计时默认时间一分钟
            defaultTime: TimerDefaultType.ONE_MINS,
            // 默认字体颜色
            color: "#ffe0b2",
            // 字体大小
            fontSize: 100,
            // 是否是二十四小时制
            isTwentyFour: true,
            // 是否显示秒数
            isShowSeconds: true,
        }),
    actions: {
        // 切换模式
        changeMode(mode: TimerMode) {
            // 切换模式时我们需要初始化计时器
            this.mode = mode;
            useTimeStore().init();
        },
        // 修改颜色
        changeColor(color: string) {
            this.color = color;
        },
        // 修改字体大小
        changeFontSize(size: number) {
            this.fontSize = size;
        },
        // 修改时间制
        changeDateSystem(data: boolean) {
            this.isTwentyFour = data;
        },
        // 修改默认时间
        changeDefaultTime(time: number) {
            // 设置默认时间
            this.defaultTime = time;
            const timeStore = useTimeStore();
            const isStart = timeStore.status === TimerStatusMode.start;
            // 若计时器不是开始状态，则修改计时时间
            if (!isStart) {
                if (this.mode === TimerMode.reverse) {
                    timeStore.timing = time;
                } else {
                    timeStore.timing = 0;
                }
                // 若为超时状态也修改为停止状态
                timeStore.stop();
            }
        },
    },
    persist: {
        key: "appStore",
        paths: [
            "mode",
            "color",
            "isTwentyFour",
            "defaultTime",
            "fontSize",
            "isShowSeconds",
        ],
        storage: localStorage,
    },
});
// 非setup
export function useAppStoreHook() {
    return useAppStore();
}
